#include <iostream>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;
bool is_l_parenthesis(char);
bool is_r_parenthesis(char);
bool check_string(string);
bool is_pair(char, char);

int main() {
	string to_check;
	cin >> to_check;
	if (check_string(to_check)) {
		cout << "YES";
	}
	else {
		cout << "NO";
	}
	return 0;
}

bool is_l_parenthesis(char c) {
	return (c == '(' || c == '{' || c == '[');
}

bool is_r_parenthesis(char c) {
	return (c == ')' || c == '}' || c == ']');
}

bool is_pair(char c, char pc) {
	if (c == ')' && pc == '(') return true;
	else if (c == ']' && pc == '[') return true;
	else if (c == '}' && pc == '{') return true;
	return false;
}

bool check_string(string s) {
	stack<char> pstack;
	for (auto x : s) {
		if (is_l_parenthesis(x)) {
			pstack.push(x);
		}
		else if (!is_r_parenthesis(x)) {
			continue;
		}
		else if (pstack.empty()) {
			return false;
		}
		else if (!is_pair(x, pstack.top())) {
			return false;
		}
		else {
			pstack.pop();
		}
	}
	return pstack.empty();
}